package com.desheng.bigdata.flink.window

import org.apache.flink.streaming.api.scala._

/**
  * flink的window窗口操作
  *     窗口分为了两类：
  *         countWindow 只能作用在keyedStreasm上，也就是说只能在keyBy之后被调用
  *             滚动：countWindow(count)，当某个key的数量达到了count之后，该key会被触发进行聚合计算，其他没有达到count数量的key不会被计算
  *             滑动: countWindow(size, slide), 当在size个大小的窗口中，如果某个key的数量达到了slide个数，该key所对应的数据集将会被触发计算
  *         timeWindow
  *             滚动
  *             滑动
  *             会话
  */
object _01CountWindowOps {
    def main(args: Array[String]): Unit = {

        val env = StreamExecutionEnvironment.getExecutionEnvironment

        val lines = env.socketTextStream("bigdata01", 9999)

        lines.flatMap(_.split("\\s+"))
                .map((_, 1))
                .keyBy(0)
//                .countWindow(4)
                .countWindow(4, 2)
                .sum(1)
                .print()


        env.execute()
    }
}
